import { _decorator, animation, Animation, AnimationClip, Component, Node, Sprite, SpriteFrame, UITransform } from 'cc';
import { PlayerStateMachine } from '../Scripts/Player/PlayerStateMachine';
import { TILE_HEIGHT, TILE_WIDTH } from '../Scripts/Tile/TileManager';
import { IEntity } from '../Levels';
import { DIRECTION_ENUM, DIRECTION_ORDER_ENUM, ENTITY_STATE_ENUM, ENTITY_TYPE_ENUM, PARAMS_NAME_ENUM } from '../Enums';
import { StateMachine } from './StateMachine';
import { randomByLength } from '../Utils';
const { ccclass, property } = _decorator;



@ccclass('EntityManager')
export class EntityManager extends Component {

    id: string = randomByLength(12)

    x: number = 0

    y: number = 0

    fsm: StateMachine

    private _direction: DIRECTION_ENUM

    private _state: ENTITY_STATE_ENUM

    private type: ENTITY_TYPE_ENUM

    get direction() {
        return this._direction
    }

    set direction(newDirection: DIRECTION_ENUM) {
        this._direction = newDirection;
        this.fsm.setParams(PARAMS_NAME_ENUM.DIRECTION, DIRECTION_ORDER_ENUM[this._direction])
    }

    get state() {
        return this._state;
    }

    set state(newState: ENTITY_STATE_ENUM) {
        console.info('newState', newState)
        this._state = newState
        this.fsm.setParams(newState, true)
    }


    async init(entity: IEntity) {
        const sprite = this.addComponent(Sprite)
        sprite.sizeMode = Sprite.SizeMode.CUSTOM

        const transform = this.getComponent(UITransform)
        transform.setContentSize(TILE_WIDTH * 4, TILE_HEIGHT * 4)

        this.x = entity.x
        this.y = entity.y
        this.type = entity.type

        this.direction = entity.direction
        console.info('entity.state', entity.state)
        this.state = entity.state
    }

    update() {
        this.node.setPosition(this.x * TILE_WIDTH - TILE_WIDTH * 1.5, - this.y * TILE_HEIGHT + TILE_HEIGHT * 1.5)
    }

    onDestroy() { }

}